package service

import (
	"context"
	"monitoring-api/models"
	"monitoring-api/serializer"
)

// UploadReqService 管理上传请求信息服务
type UploadReqService struct {
	Kind int64 `json:"kind,omitempty" form:"kind"` // 报告分类，3表示请求信息
	//ReqHeader string `json:"req_header" form:"req_header"` // 请求头，不同请求头用分号;分割
	//ReqParams string `json:"req_params" form:"req_params"` // 请求参数，只算请求体的参数，转成json
	ResBody string `json:"res_body" form:"res_body"` // 响应体，转成json，若请求失败则传递空串
	//ResHeader string `json:"res_header" form:"res_header"` // 响应头，不同响应头用分号;分割，若请求失败则传递空串
	ResTime int64  `json:"res_time" form:"res_time"` // 请求响应的时间，毫秒数，请求失败传超时时间
	SendURL string `json:"send_url" form:"send_url"` // 请求的路径，带?后面的get参数
	Status  int64  `json:"status" form:"status"`     // 状态码，请求失败则传0
	Success int64  `json:"success" form:"success"`   // 成功/失败，请求是否成功（是否有响应，与状态码无关）
	Time    int64  `json:"time" form:"time"`         // 发送请求的时间，时间戳
	URL     string `json:"url" form:"url"`           // 页面地址，不带?后面的get参数
	Way     string `json:"way" form:"way"`           // 请求方法，用小写ger/post
	WebID   int64  `json:"web_id" form:"web_id"`     // 网站id，由使用者调用脚本函数传递
}

// Upload 上传错误信息服务
func (service *UploadReqService) Upload() serializer.Response {
	var temp bool
	if service.Success == 1 {
		temp = true
	} else {
		temp = false
	}
	//初始化一个完整结构体
	Err := models.Req{
		WebID:   service.WebID,
		Kind:    service.Kind,
		Time:    service.Time,
		URL:     service.URL,
		ResBody: service.ResBody,
		ResTime: service.ResTime,
		SendURL: service.SendURL,
		Status:  service.Status,
		Success: temp,
		Way:     service.Way,
	}
	// 添加进MongoDB
	collection := models.Mongo.Collection("requests")
	_, err := collection.InsertOne(context.TODO(), Err)
	if err != nil {
		return serializer.Response{
			Code:    500,
			Message: "上报请求信息失败!",
			Error:   err.Error(),
		}
	}
	return serializer.Response{
		Code:    0,
		Message: "上报请求信息成功!",
	}
}
